#ifndef ZONES_H
#define ZONES_H

#include <QtCore>
#include <defs/global.h>
#include <core/entity.h>
#include <core/entityobject.h>

namespace Opl { namespace Core {
        class IConfig;
};};

namespace Optra{ namespace Extensions {
                 class ZoneInterface;
                 class Context;
};};

O_PRIVATE_DECLARE(Zones);
class Zones : public Opl::Core::EntityObject {
    Q_OBJECT
    Q_PROPERTY(QDeclarativeListProperty<Opl::Core::EntityObject> zones READ zones DESIGNABLE false)
public:
	typedef QList<Optra::Extensions::ZoneInterface*> ZonesInterfaces;
	Zones(Opl::Core::EntityObject *parent);
	~Zones();
	void loadZones();
	void initializeZones();
	void finalizeZones();

	void finalizeZone(Optra::Extensions::ZoneInterface* inf);

	ZonesInterfaces interfaces()const;
	QDeclarativeListProperty<Opl::Core::EntityObject> zones();

	bool isZoneLoaded(QString& name);
	bool isZoneActive(QString& name);

	void install(const QString& path);
private:
    void processDirectory(QDir dir);
    bool loadZone(Optra::Extensions::Context* ctx);
    O_PRIVATE_DECLARE_MEMBER(Zones)
};

#endif // ZONES_H

